37 CLOAD LOCALS{
: flush? ( -- ) \ offer choice to flush if buffers are dirty 
  0  #buf @ 0 do i dirty? or loop if ." Flush? (Y/N)" key dup 
  ascii Y = swap ascii y = or if flush then then empty-buffers ;
  
: movblk ( src dest cnt -- )
  locals{ src dest cnt cpydir }
  set cnt   set dest   set src 
  src dest <> if
	  1 set cpydir
	  src dest < if
		cnt 1- +set src
		cnt 1- +set dest
		-1 set cpydir 
	  then flush? 
	  cnt 0 do
		2 spaces src . ." to " dest .
		src block drop  0 dest setblk  0 dirty flush
		cpydir +set src   
		cpydir +set dest
	  loop
  else 
	cr ." No action taken "
  then ;


Scrunched version for blocks:
-----------------------------
 
--BLOCK-00072---------
37 CLOAD LOCALS{
: flush? ( -- ) \ offer choice to flush if buffers are dirty
0  #buf @ 0 do i dirty? or loop if ." Flush? (Y/N)" key dup
ascii Y = swap ascii y = or if flush then then empty-buffers ;
: movblk ( src dest cnt -- )
  locals{ src dest cnt cpydir }
  set cnt   set dest   set src
  src dest <> if 1 set cpydir  src dest < if cnt 1- +set src
  cnt 1- +set dest  -1 set cpydir  then flush?
  cnt 0 do  2 spaces src . ." to " dest . src block drop
  0 dest setblk  0 dirty flush  cpydir +set src
  cpydir +set dest  loop else cr ." No action taken " then ;
cr
.( MOVBLK loaded. Allows blocks on the same)
.( disk to be moved around. Syntax:)
.( from to count MOVBLK)

  
  


: movblk ( from to count -- )
  >r 2dup u< if 
    r> cmove> \ move from end
  else 
    r> cmove  \ move from beginning 
  then ; 